#include <iostream>
#include <vector>
#include <sstream>
#include <string>
#include <algorithm> // 确保sort可用
using namespace std;

// 提前声明函数，避免链接错误


// 主函数前定义一个安全的空结果常量，避免用户代码返回时的临时对象问题
const vector<vector<int>> EMPTY_RESULT;

{{CORE_CODE}}

vector<int> parseInput(const string& s) {
    vector<int> nums;
    // 空输入直接返回空数组，不执行任何解析
    if (s.empty()) {
        return nums;
    }
    stringstream ss(s);
    string item;
    while (getline(ss, item, ',')) {
        // 过滤空白字符
        item.erase(0, item.find_first_not_of(" \t"));
        item.erase(item.find_last_not_of(" \t") + 1);
        if (item.empty()) continue;
        // 安全转换
        try {
            nums.push_back(stoi(item));
        } catch (...) {
            continue;
        }
    }
    return nums;
}

void printResult(const vector<vector<int>>& result) {
    // 即使result为空，也强制输出[]
    cout << "[";
    for (size_t i = 0; i < result.size(); ++i) {
        cout << "[";
        for (size_t j = 0; j < result[i].size(); ++j) {
            cout << result[i][j];
            if (j < result[i].size() - 1) cout << ",";
        }
        cout << "]";
        if (i < result.size() - 1) cout << ",";
    }
    cout << "]" << endl;
}

int main() {
    try {
        string input;
        getline(cin, input);
        vector<int> nums = parseInput(input);
        // 调用用户函数前检查是否为空数组，提前返回空结果
        if (nums.empty()) {
            printResult(EMPTY_RESULT);
            return 0;
        }
        vector<vector<int>> result = threeSum(nums);
        printResult(result);
    } catch (...) {
        // 捕获所有未处理的异常，强制输出预期的空结果
        cout << "[]" << endl;
    }
    return 0;
}